MySQL로 dump 파일을 생성하고 복원하는 방법

MySQL로 dump 파일을 생성하고 복원하는 방법

MySQL로 dump 파일을 생성하고 복원하는 방법에 대해서 정리해 봤습니다.
Clock Icon2024.10.26

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 MySQL로 dump 파일을 생성하고 복원하는 방법에 대해서 정리해 봤습니다.

시험해 본 환경은 RHEL9, MySQL8.0.36입니다. RHEL9에서 MySQL 설치 시 발생하는 문제는 아래 블로그를 참고해 주세요.

https://dev.classmethod.jp/articles/jw-error-during-mysql-installation-gpg-check-failed-troubleshooting/

테스트용 데이터베이스 생성

먼저 MySQL에 접속하여 테스트용 데이터베이스와 테이블을 생성해야 합니다.

mysql> create database testdb;
mysql> use testdb;

testdb라는 이름의 테스트용 데이터베이스를 생성합니다.

mysql> CREATE TABLE test_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL
);

이어서 테이블을 생성합니다.

mysql> INSERT INTO test_table (name) VALUES ('Alice'), ('Bob'), ('Charlie');

생성한 테이블에 Alice, Bob, Charlie라는 데이터를 삽입합니다.

mysql> select * from test_table;
+----+---------+
| id | name    |
+----+---------+
|  1 | Alice   |
|  2 | Bob     |
|  3 | Charlie |
+----+---------+
3 rows in set (0.00 sec)

select * from으로 삽입한 데이터를 확인할 수 있습니다.

dump 파일 생성

이제 dump 파일을 보관할 디렉토리를 생성하고, dump 파일을 생성해 보도록 합시다.

mkdir -p /path/to/backup

path/to/backup 디렉토리를 생성합니다.

mysqldump -u root -p --all-databases > /path/to/backup/db_backup.sql <- 모든 데이터베이스를 백업

mysqldump -u root -p testdb > /path/to/backup/db_backup.sql <- 특정 데이터베이스만 백업

이제 mysqldump 명령어를 통해 dump 파일을 생성합니다. 모든 데이터베이스를 백업할 수도 있고, 특정 데이터베이스만 백업할 수도 있습니다. 둘 중 하나를 선택해서 명령어를 입력합니다.

ls /path/to/backup
db_backup.sql

ls를 입력해 보면, dump 파일이 생성된 것을 확인할 수 있습니다.
※ 사용중인 테이블, 데이터베이스의 사이즈가 크면 클수록 dump 파일의 생성에 시간이 걸립니다.

dump 파일을 이용하여 복원

이제 dump 파일을 이용하여 복원해 보도록 합시다. 먼저 복원에 앞서 기존에 생성한 테이블을 삭제합시다.

mysql> drop table test_table;
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
Empty set (0.00 sec)

drop 명령어로 테이블을 삭제하고 제대로 삭제되었는지 확인합니다.
※ 복원에는 복원할 데이터베이스를 생성할 필요가 있지만, 이번에는 데이터베이스까지 삭제하지 않았기 때문에 이대로 진행합시다.

mysql -u root -p testdb < /path/to/backup/db_backup.sql

이제 testdb의 데이터베이스를 복원합니다.

mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| test_table       |
+------------------+
1 row in set (0.00 sec)

mysql> select * from test_table;
+----+---------+
| id | name    |
+----+---------+
|  1 | Alice   |
|  2 | Bob     |
|  3 | Charlie |
+----+---------+
3 rows in set (0.00 sec)

마지막으로 show tables;와 select * from으로 결과 값을 확인해 보면, 정상적으로 복원된 것을 확인할 수 있습니다.

본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 [email protected]로 보내주시면 감사하겠습니다.

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.